﻿using System;
using System.Data;
using System.Windows.Forms;
using SiGeCoPre.Presupuesto_BL;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_Util;

namespace SiGeCoPre.Presupuesto_ViewAlta
{
    /// <summary>
    /// Formulario de alta de clientes
    /// </summary>
    public partial class frmAltaCliente : Form
    {
        BLClientes createCliente = BLFactoryPresupuesto.createCliente();
        BLCiudades createCiudad = BLFactoryPresupuesto.createCiudad();
        BLClientesCiudades createClienteCiudad = BLFactoryPresupuesto.createClienteCiudad();
 
        public frmAltaCliente()
        {
            InitializeComponent();
        }

        private void btnAlta_Click(object sender, EventArgs e)
        {
            try
            {
                if (verificar())
            {
                clientesDTO cliente = new clientesDTO();
                cliente.Activo = true;
                cliente.Contacto = txtTelefono.Text.Trim();
                cliente.Cuit = txtCuit.Text.Trim();
                cliente.Direccion = txtDireccion.Text.Trim();
                cliente.Mail = txtMail.Text.Trim();
                cliente.Nombre = txtNombre.Text.Trim();

                Boolean insertado = createCliente.saveCliente(cliente);
                Boolean insertadoClienteCiudad = insertarClienteCiudad();

                if (insertado && insertadoClienteCiudad)
                {

                    MessageBox.Show("Cliente dado de Alta!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                    this.Dispose();
                }
                else
                {
                    MessageBox.Show("Error al intentar dar de Alta!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Texto.escribirLog("Error en altaCliente");
                }    
            }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
            
        }

        private void frmAltaCliente_Load(object sender, EventArgs e)
        {
            try
            {
                DataTable ciudades = createCiudad.getAllCiudad();
                if (null != ciudades)
                {
                    foreach (DataRow dr in ciudades.Rows)
                    {
                        cmbCiudad.Items.Add(dr["Nombre"].ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
        }

        private bool insertarClienteCiudad()
        {
            bool correcto = false;

            try
            {
                clientesDTO cli = createCliente.getCliente(txtNombre.Text);
                ciudadesDTO ciu = createCiudad.getCiudad(cmbCiudad.Text);
                clientesCiudadesDTO cliCui = new clientesCiudadesDTO();
                cliCui.Nombre = txtNombre.Text;
                cliCui.Ciudad = cmbCiudad.Text;

                Boolean insertado = createClienteCiudad.saveClienteCiudad(cliCui);

                if (insertado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
            return correcto;
        }

        private bool verificar()
        {
            bool verificado = false;
            bool nombreCorrecto = false;
            bool dirCorrecta = false;
            bool ciuCorrecta = false;
            bool telCorrecto = false;
            bool mailCorrecto = false;
            bool cuitCorrecto = false;

            if (!Validador.es_nombre(txtNombre))
            {
                errorProvider1.SetError(txtNombre, "Sólo Letras");
            }
            else
            {
                errorProvider1.SetError(txtNombre, String.Empty);
                nombreCorrecto = true;
            }

            if (!Validador.es_direccion(txtDireccion))
            {
                errorProvider1.SetError(txtDireccion, "Sólo Letras y Números");
            }
            else
            {
                errorProvider1.SetError(txtDireccion, String.Empty);
                dirCorrecta = true;
            }

            if (!Validador.es_nombre(cmbCiudad))
            {
                errorProvider1.SetError(cmbCiudad, "Sólo Letras");
            }
            else
            {
                errorProvider1.SetError(cmbCiudad, String.Empty);
                ciuCorrecta = true;
            }

            if (!Validador.es_telefono(txtTelefono))
            {
                errorProvider1.SetError(txtTelefono, "Error de formato");
            }
            else
            {
                errorProvider1.SetError(txtTelefono, String.Empty);
                telCorrecto = true;
            }

            if (!Validador.es_email(txtMail))
            {
                errorProvider1.SetError(txtMail, "Ejemplo ejemplo@ejemplo.ejemplo");
            }
            else
            {
                errorProvider1.SetError(txtMail, String.Empty);
                mailCorrecto = true;
            }

            if (!Validador.es_numero(txtCuit))
            {
                errorProvider1.SetError(txtCuit, "Sólo Números");
            }
            else
            {
                errorProvider1.SetError(txtCuit, String.Empty);
                cuitCorrecto = true;
            }

            if (nombreCorrecto && cuitCorrecto && ciuCorrecta
                && mailCorrecto && telCorrecto && dirCorrecta)
            {
                verificado = true;
            }

            return verificado;
        }
    }
}
